#ifndef ISODATA_THRESHOLD_FINDER_HPP
#define ISODATA_THRESHOLD_FINDER_HPP

//------------------------------------------------------------------------------
// Fichier d'entête utilisés
//------------------------------------------------------------------------------
#include "ThresholdFinder.hpp"

namespace ImageAnalysis
{
//----------------------------------------------------------------------
// Cette classe permet de calculer un ou deux seuils
// de la région d'une image gradiant à partir de l'algorithme
//Isodata.
//----------------------------------------------------------------------
class IsoDataThresholdFinder : public ThresholdFinder
{
public:  
	//----------------------------------------------------------------------
        // Structure
        //----------------------------------------------------------------------
		
        //----------------------------------------------------------------------
        // Constructeur
        //----------------------------------------------------------------------
        IsoDataThresholdFinder();

        //----------------------------------------------------------------------
        // Destructeur
        //----------------------------------------------------------------------
        virtual ~IsoDataThresholdFinder();

        //----------------------------------------------------------------------
        // Cette méthode calcule un seuil pour l'image gradient à partir de
		// Isodata.
        //----------------------------------------------------------------------
        virtual unsigned char * GetOneThreshold(Region* regionToStudy, Gradiant* gradiantToStudy);

        //----------------------------------------------------------------------
        // Cette méthode calcule deux seuils pour l'image gradient
		// à partir d'une adaptation de la méthode Isodata.
        //----------------------------------------------------------------------
	virtual unsigned char * GetTwoThresholds(Region* regionToStudy, Gradiant* gradiantToStudy);

protected :

	//----------------------------------------------------------------------
    // Cette méthode permet de faire la moyenne statistique
	// d'une partie d'un histogramme
    //----------------------------------------------------------------------
	int ComputeAvgClass(int borneInf, int borneSup, Histogram* histogram);

    //----------------------------------------------------------------------
    // Cette méthode permet de trouver un seuil grâce à
	// la méthode Isodata sur une partie de l'histogramme.
    //----------------------------------------------------------------------
	int ComputeThreshold(int borneInf, int borneSup, Histogram* histogram);

};

}

#endif //ISODATA_THRESHOLD_FINDER_HPP
